1.6 另一个 Dart 命令
除了 1.1 Dart 命令——Dart SDK 的入口 中提到的 dartdev 的 dart 命令外,Dart SDK 中还包含一个 dart 命令,位于 runtime/bin/main.cc
,这是一个纯 C++ 实现的命令,作用也是编译执行 Dart 代码。在本文中,对这个命令的实现做简要介绍。
dart
是 Dart 运行时的主要可执行文件,它的构建定义在 BUILD.gn 文件中使用 dart_executable
模板:
dart_executable("dart") {
extra_deps = [
":dart_snapshot_cc",
"..:libdart_jit",
"../platform:libdart_platform_jit",
]
if (dart_runtime_mode != "release") {
extra_deps += [ "../observatory:standalone_observatory_archive" ]
}
extra_sources = [
"builtin.cc",
"dartdev_isolate.cc",
"dartdev_isolate.h",
"dfe.cc",
"dfe.h",
"gzip.cc",
"gzip.h",
"loader.cc",
"loader.h",
"main.cc",
"main_impl.cc",
]
if (dart_runtime_mode == "release") {
extra_sources += [ "observatory_assets_empty.cc" ]
}
if (!exclude_kernel_service) {
extra_deps += [ ":dart_kernel_platform_cc" ]
}
}
让我们逐部分分析:
-
依赖项 (extra_deps):
:dart_snapshot_cc
: 包含 Dart VM 和 isolate 快照数据。...:libdart_jit
: Dart JIT (即时编译) 运行时库。../platform:libdart_platform_jit
: Dart 平台库的 JIT 版本。- 在非 release 模式下,还包括
../observatory:standalone_observatory_archive
,这是 Dart 的调试和性能分析工具。 - 如果没有排除 kernel service,还包括
:dart_kernel_platform_cc
。
-
源文件 (extra_sources):
builtin.cc
: 实现内置函数和对象。dartdev_isolate.cc
和dartdev_isolate.h
: 处理 dart 开发工具相关的 isolate。dfe.cc
和dfe.h
: 可能与 Dart 前端 (Dart Front End) 相关。gzip.cc
和gzip.h
: 处理 gzip 压缩。loader.cc
和loader.h
: 负责加载 Dart 代码和资源。main.cc
和main_impl.cc
: 主程序入口和实现。
-
配置:
- 使用了
dart_executable
模板,这个模板在文件的前面定义,它设置了一些通用的配置,如编译器标志、包含目录等。 - 应用了
:export_api_symbols
配置,确保正确导出 Dart API 符号。 - 根据
dart_runtime_mode
应用了不同的产品配置(release 或非 release)。
- 使用了
-
特殊处理:
- 在 release 模式下,添加
observatory_assets_empty.cc
,可能是为了省略调试相关的资源。 - 根据
exclude_kernel_service
的设置决定是否包含 kernel service。
- 在 release 模式下,添加
-
其他隐含的组成部分:
- 通过
dart_executable
模板,它还包含了crashpad
(崩溃报告工具)、standalone_dart_io
(Dart IO 库的独立实现)等依赖。 - 包含了 BoringSSL 和 zlib 库的依赖。
- 通过
-
平台特定的处理:
- 在 Windows 上,会链接一些额外的系统库,如
ole32.lib
,iphlpapi.lib
等。
- 在 Windows 上,会链接一些额外的系统库,如
总的来说,dart
可执行文件是一个复杂的构建产物,它集成了 Dart 运行时的核心组件、JIT 编译器、标准库实现、开发工具支持,以及各种必要的系统和第三方库。这使得它能够作为一个完整的 Dart 执行环境,支持运行和调试 Dart 程序。
本文作者:Maeiee
本文链接:1.6 另一个 Dart 命令
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!